pandas系列之横向拼接(三)连接方式

您所在的位置:网站首页 pandas 纵向拼接 pandas系列之横向拼接(三)连接方式

pandas系列之横向拼接(三)连接方式

2023-03-26 10:05| 来源: 网络整理| 查看: 265

前面两篇,无论是连接表的类型还是连接键的类型,待连接的两个表总是至少都存在一列,它们的内容是相同的。当然,列名不一定相同。如果列名相同,那就是公共列,直接采取连接表即可。若不同,则采用连接键即可。如果说不存在内容的相同的列,这个时候只能采用连接方式了。

表的连接方式有内连接(inner)、外连接(outer,也叫全连接)、左连接(left)、右连接(right)

四种连接方式示意图如下:

20200423151541228.png

连接方式通过how参数进行指定

为了方便叙述,假定要操作的两个表为A和B

本文所用到的两个表格内容如下:

成绩表

image-20210801113736212.png

学生信息表

image-20210801121952841.png

先来看一下两个表 的数据情形

import pandas as pd ​ ​ score_df = pd.read_excel(r'C:\Users\admin\Desktop\成绩表.xlsx') print(score_df) 复制代码

result:

  学号 姓名 成绩 排名 0   0 小明 90   3 1   1 小刚 89   4 2   2 小红 98   1 3   3 小兰 63   7 4   4 李华 95   2 5   5 张三 23   9 6   6 李四 56   8 7   7 王五 85   5 8   8 小张 72   6 复制代码 stu_df = pd.read_excel(r'C:\Users\admin\Desktop\学生信息表.xlsx') print(stu_df) 复制代码

result:

  学号   年级 班级 0   0 三年级 二班 1   1 五年级 三班 2   2 六年级 一班 3   9 六年级 一班 复制代码 1.内连接(inner)

内连接就是两个表取交集,即A∩B

score_df = pd.read_excel(r'C:\Users\admin\Desktop\成绩表.xlsx') stu_df = pd.read_excel(r'C:\Users\admin\Desktop\学生信息表.xlsx') new_df = pd.merge(score_df, stu_df, how='inner') print(new_df) 复制代码

result:

  学号 姓名 成绩 排名   年级 班级 0   0 小明 90   3 三年级 二班 1   1 小刚 89   4 五年级 三班 2   2 小红 98   1 六年级 一班 复制代码

结果只显示在学生信息表中的学生对应的成绩,无论是成绩表中的学号为9的记录还是学生信息表中的小兰、李华等人,都没有显示出来。

2.外连接(outer)

内连接就是两个表取并集,即A∪B

score_df = pd.read_excel(r'C:\Users\admin\Desktop\成绩表.xlsx') stu_df = pd.read_excel(r'C:\Users\admin\Desktop\学生信息表.xlsx') new_df = pd.merge(score_df, stu_df, how='outer') print(new_df) 复制代码

result:

  学号   姓名   成绩   排名   年级   班级 0   0   小明 90.0 3.0 三年级   二班 1   1   小刚 89.0 4.0 五年级   三班 2   2   小红 98.0 1.0 六年级   一班 3   3   小兰 63.0 7.0 NaN NaN 4   4   李华 95.0 2.0 NaN NaN 5   5   张三 23.0 9.0 NaN NaN 6   6   李四 56.0 8.0 NaN NaN 7   7   王五 85.0 5.0 NaN NaN 8   8   小张 72.0 6.0 NaN NaN 9   9 NaN   NaN NaN 六年级   一班 复制代码

结果会显示所有学生的信息,即使这些学生没有成绩也会显示(比如小兰、李华等人)。同样地,对于成绩表,即使没有学生与之匹配,也会显示出来(比如学号为9的记录)

3.左连接(left)

左连接就是获取A∪(A∩B)

score_df = pd.read_excel(r'C:\Users\admin\Desktop\成绩表.xlsx') stu_df = pd.read_excel(r'C:\Users\admin\Desktop\学生信息表.xlsx') new_df = pd.merge(score_df, stu_df, how='left') print(new_df) 复制代码

result:

  学号 姓名 成绩 排名   年级   班级 0   0 小明 90   3 三年级   二班 1   1 小刚 89   4 五年级   三班 2   2 小红 98   1 六年级   一班 3   3 小兰 63   7 NaN NaN 4   4 李华 95   2 NaN NaN 5   5 张三 23   9 NaN NaN 6   6 李四 56   8 NaN NaN 7   7 王五 85   5 NaN NaN 8   8 小张 72   6 NaN NaN 复制代码

结果会显示成绩表的所有数据,无论学生信息表有没有与之匹配的记录都会显示。而学生信息表中学号为9的记录因为没有在成绩表中找到对应的记录,因而不显示

4.右连接(right)

右连接就是获取B∪(A∩B)

score_df = pd.read_excel(r'C:\Users\admin\Desktop\成绩表.xlsx') stu_df = pd.read_excel(r'C:\Users\admin\Desktop\学生信息表.xlsx') new_df = pd.merge(score_df, stu_df, how='right') print(new_df) 复制代码

result:

  学号   姓名   成绩   排名   年级 班级 0   0   小明 90.0 3.0 三年级 二班 1   1   小刚 89.0 4.0 五年级 三班 2   2   小红 98.0 1.0 六年级 一班 3   9 NaN   NaN NaN 六年级 一班 复制代码

结果会显示学生信息表的所有数据,无论成绩表有没有与之匹配的记录都会显示。而成绩表中小兰、李华等人因为没有在学生信息表中找到对应的记录,因而不显示



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3